package cn.net.withub.dataCollector.common.utils;

import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

import java.util.*;


/**
 * 此类是处理json字符串的工具类
 * 
 * @author xiaomeng
 * @since 2013-08-27
 * 
 */
public class JsonHelper {
	/**
	 * 将json字符串转换为List集合
	 * 
	 * @param jsonArrStr
	 * @return
	 */
	public static List<Map<String, Object>> jsonObjList(String jsonArrStr) throws Exception {
		List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();
		JSONArray jsonArr = null;
		try {
			jsonArr = new JSONArray().fromObject(jsonArrStr);
			jsonList = (List<Map<String, Object>>) JsonHelper.jsonToList(jsonArr);
		} catch (JSONException e) {
			System.out.println("Json字符串转换异常！");
			e.printStackTrace();
		}
		return jsonList;
	}

	/**
	 * 将json对象的键值存放在集合，映射table的column
	 * 
	 * @param map
	 * @return
	 */
	public static List<String> jsonMapKeysList(Map<?, ?> map) {
		List<String> jsonjsonList = new ArrayList<String>();
		String columnStr = "column";
		for (int i = 0; i < map.keySet().size(); i++) {
			jsonjsonList.add(columnStr + (i + 1));
		}
		System.out.println(jsonjsonList.size());
		return jsonjsonList;
	}

	/**
	 * 将传递近来的json数组转换为List集合
	 * 
	 * @param jsonArr
	 * @return www.it165.net
	 * @throws JSONException
	 */
	private static List<?> jsonToList(JSONArray jsonArr) throws Exception {
		List<Object> jsonToMapList = new ArrayList<Object>();
		for (int i = 0; i < jsonArr.size(); i++) {
			Object object = jsonArr.get(i);
			if (object instanceof JSONArray) {
				jsonToMapList.add(JsonHelper.jsonToList((JSONArray) object));
			} else if (object instanceof JSONObject) {
				jsonToMapList.add(JsonHelper.jsonToMap((JSONObject) object));
			} else {
				jsonToMapList.add(object);
			}
		}
		return jsonToMapList;
	}

	/**
	 * 将传递近来的json对象转换为Map集合
	 * 
	 * @param jsonObj
	 * @return
	 * @throws JSONException
	 */
	@SuppressWarnings("unchecked")
	private static Map<String, Object> jsonToMap(JSONObject jsonObj)
			throws Exception {
		Map<String, Object> jsonMap = new HashMap<String, Object>();
		Iterator<String> jsonKeys = jsonObj.keys();
		while (jsonKeys.hasNext()) {
			String jsonKey = jsonKeys.next();
			Object jsonValObj = jsonObj.get(jsonKey);
			if (jsonValObj instanceof JSONArray) {
				jsonMap.put(jsonKey,
						JsonHelper.jsonToList((JSONArray) jsonValObj));
			} else if (jsonValObj instanceof JSONObject) {
				jsonMap.put(jsonKey,
						JsonHelper.jsonToMap((JSONObject) jsonValObj));
			} else {
				jsonMap.put(jsonKey, jsonValObj);
			}
		}
		return jsonMap;
	}
	
	//JSON字符串转Map
	@SuppressWarnings("rawtypes")
	public static Map<String,Object> jsonToMap(String jsonString) {
		 Map<String,Object> valueMap = new HashMap<String,Object>();
        JSONObject jsonObject = JSONObject.fromObject(jsonString);   
        if(jsonObject!=null&&!jsonObject.toString().equals("null")){
	        Iterator keyIter = jsonObject.keys();
             
	        while (keyIter.hasNext()) {         
	        	String key  = (String) keyIter.next();
	        	Object value = jsonObject.get(key);
	            valueMap.put(key, value);         
	        }    
        }
        
        return valueMap;         
    } 
}
